STM8 Timer 2 and 3

Die Capture/Compare Kanäle

Der Unterschied zwischen einem Zähler (Counter) und einem Timer besteht in der zusätzlichen Funktionalität eines „Timer Channels“. Hier wird unterschieden zwischen einer „Capture“ Funktion und einer „Compare“ Funktion, die im weiteren Verlauf beschrieben werden sollen.

Die Pins der Timer (TIMn_CHi) können alternativ als Eingang oder als Ausgang arbeiten. Die Umschaltung erfolgt im jeweiligen Register TIMn_CCMRi, für den entsprechenden Kanal.

Output Compare Funktion

Der „Output Compare“ Betrieb wird durch den Wert 0x00b in den Capture Compare Selection Bits CCiS aktiviert. In diesem Modus wird der Zählerstand kontinuierlich mit dem Wert im 16-Bit Capture/Compare Register verglichen und das Ergebnis des Vergleichs steuert den Logikzustand am Timer-Kanal-Ausgang OCi.

Die Struktur eines Compare-Kanals ist in nachfolgenden Bild dargestellt. Das Ergebnis des jeweiligen Vergleichs zwischen dem Zählerstand und dem Cap/Com Register wird über den „Output Mode“ Block selektiert und je nach Einstellung, direkt oder invertiert an das Ausgangs-Port angelegt.

Die Polarität des Ausgangssignals ist über die „CCiP“ Bits in den Registern TIMn_CCERi invertierbar und der Ausgang kann über die „CCiE“ Bits im gleichen Register komplett abgeschaltet werden.

Im Gegensatz zum Timer1 der STM8 Serie besitzen die Ausgangsschaltungen von Timer2 und Timer3 keine komplementären Ausgänge die extern über Pins zur Verfügung stehen.

Parallel dazu kann bei einem eintretenden „Compare“-Event (Zähler = C/C-Register oder alternativ Zähler > C/C-Register) ein Interrupt ausgelöst werden. Dafür muß der entsprechende Interrupt über die „CCiIE“ Bits im TIMn_EGR Register für den jeweiligen Kanal freigegeben werden.

Input Capture Funktion

Bei der Input Capture Funktion wird der jeweilige Timer-Pin als Eingang konfiguriert. Das dort anliegende externe Signal wird über eine Filterfunktion qualifiziert und danach hinsichtlich des gewünschten Verhaltens auf eine steigende oder fallende Flanke überprüft.

Ist der Eingang über die CCiS[1..0] Bits freigeschaltet so wird das Signal über einen Event-Teiler als Capture-Auslöser verwendet.

 Die Capture Compare Mode Register (TIMn_CCMRi)

Für jeden Kanal eines Timers ist ein solches Register vorhanden. Die Register haben folgenden Inhalt (Bit2 bis Bit7), der sich durch die Auswahl der Bits CCiS[1..0] hinsichtlich der Funktion unterscheiden. Nachfolgend sind deshalb die höheren 6 Bit des Registers einmal für die Einstellungs als Ausgang und einmal für die Einstellung als Eingang beschrieben.

TIMn_CCMRi Register - Cap / Com Mode Register                 (T2 = 0x00.5305/06/07, T3 = 00.5325/26h im STM8S)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit2 Bit 1 Bit 0
TIMn_CCMRi als Ausgang reserv. OCiM[2] OCiM[1] OCiM[0] OCiPE reserv. CCiS[1] CCiS[0]
Reset Wert 0 0 0 0 0 0 0 0
TIMn_CCMRi als Eingang ICiF[3] ICiF[2] ICiF[1] ICiF[0] CiPSC[1] ICiPSC[0] CCiS[1] CCiS[0]
Reset Wert 0 0 0 0 0 0 0 0

OCiM[2..0] – Output Compare Modus Bits (nur wenn CCiS[1..0] als Ausgang definiert ist)

Der Modus der Signalerzeugung wird über die Bits OCiM[2..0] im Register TIMn_CCMRi festgelegt. Für die Einstellung des Capture Modus über die OCiM[2..0] Bits gilt folgende Tabelle

Compare Mode Einstellung
OCiM[2..0] Modus Aktion OCiREF Signal
000 „Frozen“ keine kein Effekt (Reset Wert)
001 „Activ when match“ OCiREF wird „high“ das Signal geht auf „high“ und bleibt „high“
010 „Inactive when match“ OCiREF wird „low“ das Signal geht auf „low“ und bleibt „low“
011 „Toggle“ OCiREF ändert Polarität das Signal invertiert bei Gleichheit: CNT=CCR
100 „Force inactive“ OCiREF statisch „low“ das Signal ändert sich nicht mehr
101 „Force active“ OCiREF statisch „high“ das Signal ändert sich nicht mehr
110 „PWM active“ CNTR < CCR  „high“ das Signal ist nur „high“ wenn CNTR < CCR-Wert
111 „PWM inactive“ CNTR < CCR  „low“ das Signal ist nur „low“ wenn CNTR < CCR-Wert

OCiPE – Output Compare Preload Enable (nur wenn CCiS[1..0] als Ausgang definiert ist)

Wie das ARR-Register besitzt auch das Capture-Compare Register ein “Shadow”-Register das die Synchronisation einer Änderung des Register-Wertes im Zeitablauf ermöglicht. Das OCiPE Bit schaltet diese Synchronisation frei wenn es auf „1“ gesetzt ist.

Ist das OCiPE Bit dagegen „0“ so wird ein Schreibvorgang in das Capture-Compare-Register unmittelbar auch das Shadowregister ändern.

Im PWM Mode muss das „Shadow“-Register aktiviert sein damit eine Änderung des PWM-Werts mit dem Ausgangssignal synchronisiert wird und keine fehlerhaften PWM-Werte entstehen.

CCiS[1..0] – Capture Compare Selection Bits (für Auswahl als Eingang oder Ausgang)

Die beiden CCiS[1..0] Bits definieren die Funktion der Timer-Pins. Es gilt folgende Einstellungstabelle:

Capture Compare Signal Auswahl
CCiS[1..0] Kanal-Modus Signalpin OCiREF Signal
00 Ausgang TIMn_CHi ist Ausgang OCiREF and TIMn_CHi
01 Eingang TIMn_CHi ist Eingang Signal wird gerouted, ICi-Signal an TI1FP1
10 Eingang TIMn_CHi ist Eingang Signal wird gerouted, ICi-Signal an TI2FP1
11 Eingang ICi-Signal an TRC Funktioniert nur mit TIM5 als Trigger Eingang

ICiF[3..0] – Input Capture Filter (nur wenn CCiS[1..0] als Eingang definiert ist)

Capture Filter Einstellung
ICiF[3..0] Abtastfrequenz Abtastwerte Beschreibung
0000 FMaster N = 1 kein Effekt
0001 FMaster N = 2 Der Eingang wird 2 x mit fMaster abgetastet
0010 FMaster N = 4 Der Eingang wird 4 x mit fMaster abgetastet
0011 FMaster N = 8 Der Eingang wird 8 x mit fMaster abgetastet
0100 FMaster/2 N = 6 Der Eingang wird 6 x mit fMaster/2 abgetastet
0101 FMaster/2 N = 8 Der Eingang wird 8 x mit fMaster/2 abgetastet
0110 FMaster/4 N = 6 Der Eingang wird 6 x mit fMaster/4 abgetastet
0111 FMaster/4 N = 8 Der Eingang wird 8 x mit fMaster/4 abgetastet
1000 FMaster/8 N = 6 Der Eingang wird 6 x mit fMaster/8 abgetastet
1001 FMaster/8 N = 8 Der Eingang wird 8 x mit fMaster/8 abgetastet
1010 FMaster/16 N = 5 Der Eingang wird 5 x mit fMaster/16 abgetastet
1011 FMaster/16 N = 6 Der Eingang wird 6 x mit fMaster/16 abgetastet
1100 FMaster/16 N = 8 Der Eingang wird 8 x mit fMaster/16 abgetastet
1101 FMaster/32 N = 5 Der Eingang wird 5 x mit fMaster/32 abgetastet
1110 FMaster/32 N = 6 Der Eingang wird 6 x mit fMaster/32 abgetastet
1111 FMaster/32 N = 8 Der Eingang wird 8 x mit fMaster/32 abgetastet

Das Eingangssignal wird über dieses Filter das im Wesentlichen aus einem Zähler besteht, qualifiziert und dient als Unterdrückung von „Glitches“. Als Beispiel sei der Wert 0x1000b erklärt: Der Timer Eingang wird mit einer Frequenz von FMaster/8 = 16MHz / 8 = 2 MHz abgetastet und das Abtastsignal dient als Takt für den nachfolgenden Zähler der in dieser Einstellung 6 gültige Samples benötigt um das Eingangssignal zu akzeptieren.

ICiPS[1..0] – Input Capture Prescaler (nur wenn CCiS[1..0] als Eingang definiert ist)

Das vom Filter gelieferte Eingangssignal wird in dem nachfolgenden „Capture Prescaler“ weiter geteilt. Damit können mehrere „Events“ zu einem übergreifenden Event zusammengefasst werden. Die ICiPS[1..0] Bits definieren die Anzahl der nötigen Events.

Input Capture Prescaler
ICiPS[1..0] Teiler Ausgangssignal Funktion
00 1 jeder Event Zähler-Capture bei jedem Eingangsevent
01 2 jeder zweite Event
10 4 jeder vierte Event
11 8 jeder achte Event

Die „Input Capture Vorteiler“ Einstellung kann im laufenden Betrieb überschrieben werden. Allerdings läuft der Zähler weiter und wird nicht zurückgesetzt. Sollte ein Reset des Zählers gewünscht werden so kann das CCiE Bit des Capture-Kanals zurückgesetzt und danach wieder aktiviert („1“) werden. Dadurch wird der Zähler auf „000“ gesetzt.

Das Capture Compare Enable Register 1 (TIMn_CCER1)

Das TIMn_CCER1 Register beinhaltet die Einstellungen für die Kanäle 1 und 2 des jeweiligen Timers. Für jeden Kanal steht ein Bit für die Freigabe bzw. für die verwendete Polarität bereit.

Diese Konfigurations-Bits haben wieder je nach Einstellung (Eingang/Ausgang) unterschiedliche Bedeutungen.

TIMn_CCER1 Register - Cap / Com Enable Register                         (T2 = 0x00.5308h,T3 = 0x00.5327 im STM8S)
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TIMn_CCER1 reserv. reserv. CC2P CC2E reserv. reserv. CC1P CC1E
Reset Wert 0 0 0 0 0 0 0 0

CC2P – Capture Compare Channel 2 Polarity

              Kanal ist als Ausgang geschaltet:

Bit 5 = CC2P Bit = 0,  „Compare“ Ausgang 2 ist „active high“(Polarity).
= 1,  „Compare“ Ausgang 2 ist „active low“ (Polarity).

              Kanal ist als Eingang geschaltet:

Bit 5 = CC2P Bit = 0,  „Capture“ erfolgt auf die steigende Flanke.
= 1,  „Capture“ erfolgt auf die fallende Flanke.

CC2E – Capture Compare Channel 2 Enable

              Kanal ist als Ausgang geschaltet:

Bit 4 = CC2E Bit = 0,  „Compare“ Ausgang 2 ist deaktiviert.
= 1,  „Compare“ Ausgang 2 ist aktiviert.

              Kanal ist als Eingang geschaltet:

Bit 4 = CC2E Bit = 0,  „Capture“ Eingang 2 ist deaktiviert.
= 1,  „Capture“ Eingang 2 ist aktiviert.

CC1P – Capture Compare Channel 1 Polarity

              Kanal ist als Ausgang geschaltet:

Bit 1 = CC1P Bit = 0,  „Compare“ Ausgang 1 ist „active high“(Polarity).
= 1,  „Compare“ Ausgang 1 ist „active low“ (Polarity).

              Kanal ist als Eingang geschaltet:

Bit 1 = CC1P Bit = 0,  „Capture“ erfolgt auf die steigende Flanke.
= 1,  „Capture“ erfolgt auf die fallende Flanke.

CC1E – Capture Compare Channel 1 Enable

              Kanal ist als Ausgang geschaltet:

Bit 0 = CC1E Bit = 0,  „Compare“ Ausgang ist deaktiviert.
= 1,  „Compare“ Ausgang ist aktiviert.

              Kanal ist als Eingang geschaltet:

Bit 0 = CC1E Bit = 0,  „Capture“ Eingang ist deaktiviert.
= 1,  „Capture“ Eingang ist aktiviert.

Das Capture Compare Enable Register 2 (TIM2_CCER2)

Das TIM2_CCER2 Register beinhaltet die Einstellungen für den Kanal 3 des Timers2. Für diesen Kanal steht ein Bit für die Freigabe bzw. für die verwendete Polarität bereit. Für Timer3 gibt es kein solches Register da dieser Timer nur 2 Cap/Com Kanäle besitzt.

Die Konfigurations-Bits haben wieder je nach Einstellung (Eingang/Ausgang) unterschiedliche Bedeutungen. Nur die Bits 0 und 1 sind relevant in diesem Register.

TIM2_CCER2 Register - Cap / Com Enable Register                  (T2 = 0x00.5309h, T3 = nicht vorhanden im STM8S
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TIMn_CCER2 reserv. reserv. reserv. reserv. reserv. reserv. CC3P CC3E
Reset Wert 0 0 0 0 0 0 0 0

CC3P – CaptureCompare Channel 3 Polarity

              Kanal ist als Ausgang geschaltet:

Bit 1 = CC3P Bit = 0,  „Compare“ Ausgang ist „active high“(Polarity).
= 1,  „Compare“ Ausgang ist „active low“ (Polarity).

              Kanal ist als Eingang geschaltet:

Bit 1 = CC3P Bit = 0,  „Capture“ erfolgt auf die steigende Flanke.
= 1,  „Capture“ erfolgt auf die fallende Flanke.

CC3E – Capture Compare Channel 3 Enable

              Kanal ist als Ausgang geschaltet:

Bit 0 = CC3E Bit = 0,  „Compare“ Ausgang ist deaktiviert.
= 1,  „Compare“ Ausgang ist aktiviert.

              Kanal ist als Eingang geschaltet:

Bit 0 = CC3E Bit = 0,  „Capture“ Eingang ist deaktiviert.
= 1,  „Capture“ Eingang ist aktiviert.

Die Capture Compare Register (TIMn_CCRiH, TIMn_CCRiL)

Für jeden der Cap/Com Kanäle in den Timern 2 und 3 gibt es ein 16-Bit Register das den jeweiligen Cap/Com-Wert aufnimmt. Der Zugriff auf diese Register erfolgt, wie bei den anderen 16-Bit Registern in den Timern über jeweils ein High“-Byte und ein „ Low“-Byte.

Die Cap/Com Register sind für Schreib/Lese-Voränge ebenfalls durch ein „Shadow“-Register „gepuffert“.

TIMn_CCRiH Register - Cap/Com Register High                 (T2 = 0x00.530F/11/13, T3 = 0x00.532D/2Fh, im STM8S
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TIMn_CCRiH CCRi[15] CCRi[14] CCRi[13] CCRi[12] CCRi[11] CCRi[10] CCRi[9] CCRi[8]
Reset Wert 0 0 0 0 0 0 0 0
TIMn_CCRiL Register - Cap/Com Register Low                 (T2 = 0x00.5310/12/14, T3 = 0x00.532E/30h, im STM8S
Register Name Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
TIMn_CCRiL CCRi[7] CCRi[6] CCRi[5] CCRi[4] CCRi[3] CCRi[2] CCRi[1] CCRi[0]
Reset Wert 0 0 0 0 0 0 0 0

 Copyright Notiz

Dieses Dokument sowie dessen Inhalt, insbesondere Texte, Fotografien und Grafiken, unterliegt dem Copyright (© 2017) und sind nur mit einer schriftlicher Zustimmung des Autors, Dipl.Ing.(FH) Franz Henkel zur vollständigen oder auszugsweisen Weiterverwendung in Form einer gedruckten oder elektronischen Kopie oder Replikation bzw. einer vollständigen oder auszugsweisen Bereitstellung des Inhalts in schriftlicher oder elektronischer Form, zu verwenden.